package com.beyondbit.demo.utils;


import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringUtils {

    public static String mergeComma(String tmpNames) {
        // 将字符串中的 ,,, 或 ,, 改成 ,
        String tmpNames1 = tmpNames.replace(",,", ",").replace(",,", ",");
        if (tmpNames1.startsWith(",")) {
            tmpNames1 = tmpNames1.substring(1);
        }
        if (tmpNames1.endsWith(",")) {
            tmpNames1 = tmpNames1.substring(0, tmpNames1.length() - 1);
        }

        return tmpNames1;
    }

    /**
     * 将 Object 转换成字符串。
     *
     * @param value 输入值
     * @return 输出值，对于 null 将返回空串
     */
    public static String parseString(Object value) {
        if (value == null)
            return "";

        return value.toString();
    }

    /**
     * 将 java.lang.Object 转换为 java.lang.Integer。
     *
     * @param value 输入值
     * @return 输出值
     */
    public static Integer parseInteger(Object value) {
        if (value == null || value.toString().length() == 0)
            return null;

        return Integer.parseInt(value.toString());
    }

    /**
     * 将 java.lang.Double 转换为字符串。
     *
     * @param value 输入值
     * @return 输出值，将 null 转换为空串
     */
    public static String formatDouble(Double value) {
        return (value == null) ? "" : value.toString();
    }

    /**
     * 将 java.lang.Float 转换为字符串。
     *
     * @param value 输入值
     * @return 输出值，将 null 转换为空串
     */
    public static String formatFloat(Float value) {
        return (value == null) ? "" : value.toString();
    }

    /**
     * 将 java.lang.Object 转换为 java.math.BigDecimal。
     *
     * @param value 输入值
     * @return 输出值
     */
    public static BigDecimal parseBigDecimal(Object value, int scale) {
        if (value == null || value.toString().length() == 0) {
            return null;
        } else {
            String val = parseString(value);
            val = val.replaceAll(",", "");
            return new BigDecimal(val).setScale(scale, BigDecimal.ROUND_HALF_UP);
        }
    }

    /**
     * 将 java.lang.Object 转换为 java.lang.Date。
     *
     * @param value  输入值
     * @param format 格式化字符串
     * @return 输出值
     */
    public static Date parseDate(Object value, String format) {
        if (value == null || value.toString().length() == 0)
            return null;

        try {
            return new SimpleDateFormat(format).parse(value.toString());
        } catch (ParseException ex) {

        }

        return null;
    }

    /**
     * 判断字符串是否为数字。
     *
     * @param str 字符串
     * @return true/false
     */
    public static boolean isNumeric(String str) {
        Pattern pattern = Pattern.compile("^(-?\\d+)(\\.\\d+)?$");
        Matcher isNum = pattern.matcher(str);
        return isNum.matches();
    }

    /**
     * 将 Object 转换成字符串，并去掉字符串首位空格。
     *
     * @param value 输入值
     * @return 输出去掉空格的字符串，对于 null 将返回空串
     */
    public static String trimString(Object value) {
        if (value == null)
            return "";
        return value.toString().trim();
    }

    /**
     * 判断字符串是否为空
     *
     * @param value 输入值
     * @return 是否为空
     */
    public static Boolean isNullOrWhiteSpace(Object value) {
        if (value == null || "".equals(value.toString().trim()))
            return true;
        else
            return false;
    }

    /**
     * * 判断一个对象数组是否非空
     *
     * @param objects 要判断的对象数组
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Object[] objects) {
        return !isEmpty(objects);
    }

    /**
     * * 判断一个对象数组是否为空
     *
     * @param objects 要判断的对象数组
     *                * @return true：为空 false：非空
     */
    public static boolean isEmpty(Object[] objects) {
        return isNull(objects) || (objects.length == 0);
    }

    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }


}

